海南老脚数

vuePress-theme-reco 海南老脚数    2017 - 2021
海南老脚数 海南老脚数

Choose mode

  • dark
  • auto
  • light
主页
指南
  • 应用介绍
  • cH5-PWA应用 (opens new window)
  • SSR-个人官网 (opens new window)
  • 微前端框架应用 (opens new window)
印记
高级
  • 小程序Node后端实践
  • JS开发灵活的数据应用
  • Node核心知识
  • Git原理详解及实战
进阶
  • 大厂H5开发实战
  • 前端性能优化
  • 前端面试指南
组件库
  • Vue3.0
  • Nuxt
  • 吃吃吃
分类
  • 问题集中营
  • VUE
  • 前端小笔记
  • Cookie
  • 深夜食堂
标签
Github (opens new window)
掘金 (opens new window)
author-avatar

海南老脚数

5

文章

4

标签

主页
指南
  • 应用介绍
  • cH5-PWA应用 (opens new window)
  • SSR-个人官网 (opens new window)
  • 微前端框架应用 (opens new window)
印记
高级
  • 小程序Node后端实践
  • JS开发灵活的数据应用
  • Node核心知识
  • Git原理详解及实战
进阶
  • 大厂H5开发实战
  • 前端性能优化
  • 前端面试指南
组件库
  • Vue3.0
  • Nuxt
  • 吃吃吃
分类
  • 问题集中营
  • VUE
  • 前端小笔记
  • Cookie
  • 深夜食堂
标签
Github (opens new window)
掘金 (opens new window)
  • 额外说点:.gitignore——排除不想被管理的文件和目录
  • 高级 1:不喜欢 merge 的分叉?用 rebase 吧
  • 高级 2:刚刚提交的代码,发现写错了怎么办?
  • 高级 3:写错的不是最新的提交,而是倒数第二个?
  • 高级 4:比错还错,想直接丢弃刚写的提交?
  • 高级 5:想丢弃的也不是最新的提交?
  • 高级 6:代码已经 push 上去了才发现写错?
  • 高级 7:reset 的本质——不止可以撤销提交
  • 高级 8:checkout 的本质
  • 高级 9:紧急情况:「立即给我打个包,现在马上!」
  • 高级 10:branch 删过了才想起来有用?
  • 进阶 1:HEAD、master 与 branch
  • 进阶 2:push 的本质
  • 进阶 3:merge:合并 commits
  • 进阶 4:Feature Branching:最流行的工作流
  • 进阶 5:关于 add
  • 进阶 6:看看我都改了什么
  • 上手 1:新公司用 Git 管理代码,怎么快速上手?
  • 上手 2:团队工作的基本工作模型
  • 什么是分布式版本控制系统(DVCS)
  • 什么是版本控制系统(VCS)
  • 总结

vuePress-theme-reco 海南老脚数    2017 - 2021

高级 1:不喜欢 merge 的分叉?用 rebase 吧

海南老脚数

# 高级 1:不喜欢 merge 的分叉?用 rebase 吧

有些人不喜欢 merge,因为在 merge 之后,commit 历史就会出现分叉,这种分叉再汇合的结构会让有些人觉得混乱而难以管理。如果你不希望 commit 历史出现分叉,可以用 rebase 来代替 merge。

# rebase——在新位置重新提交

rebase ,又是一个中国人看不懂的词。这个词的意思,你如果查一下的话:

哈?玩个 Git 就弯了?

其实这个翻译还是比较准确的。rebase 的意思是,给你的 commit 序列重新设置基础点(也就是父 commit)。展开来说就是,把你指定的 commit 以及它所在的 commit 串,以指定的目标 commit 为基础,依次重新提交一次。例如下面这个 merge:

git merge branch1

1
2

如果把 merge 换成 rebase,可以这样操作:

git checkout branch1
git rebase master

1
2
3

可以看出,通过 rebase,5 和 6 两条 commits 把基础点从 2 换成了 4 。通过这样的方式,就让本来分叉了的提交历史重新回到了一条线。这种「重新设置基础点」的操作,就是 rebase 的含义。

另外,在 rebase 之后,记得切回 master 再 merge 一下,把 master 移到最新的 commit:

git checkout master
git merge branch1

1
2
3

为什么要从 branch1 来 rebase,然后再切回 master 再 merge 一下这么麻烦,而不是直接在 master 上执行 rebase?

从图中可以看出,rebase 后的 commit 虽然内容和 rebase 之前相同,但它们已经是不同的 commits 了。如果直接从 master 执行 rebase 的话,就会是下面这样:

这就导致 master 上之前的两个最新 commit 被剔除了。如果这两个 commit 之前已经在中央仓库存在,这就会导致没法 push 了:

所以,为了避免和远端仓库发生冲突,一般不要从 master 向其他 branch 执行 rebase 操作。而如果是 master 以外的 branch 之间的 rebase(比如 branch1 和 branch2 之间),就不必这么多费一步,直接 rebase 就好。

# 小结

本节介绍的是 rebase 指令,它可以改变 commit 序列的基础点。它的使用方式很简单:

git rebase 目标基础点

1
2

需要说明的是,rebase 是站在需要被 rebase 的 commit 上进行操作,这点和 merge 是不同的。

欢迎来到 海南老脚数
看板娘